home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / misc / AWNP_2-39.lha / AWNP / AWNP-Docs / Tutorials / tutorial5.rx < prev    next >
Text File  |  2000-02-11  |  10KB  |  386 lines

  1. /*Tutorial 5 for AWNPipe*/
  2.  
  3. if show('P','TUTORIAL5') then do
  4.   address TUTORIAL5 'front'
  5.   exit
  6. end
  7.  
  8. /* keep env setting compatable to demo 4*/
  9. envname='GUITutorial4'
  10. delaybub=0
  11. call setdefaults()
  12. call buildgui()
  13.  
  14. topipe('id 'savegad' dis 1 ref')
  15.  
  16. /*main loop*/
  17. do while ~eof(ca)
  18. call topipe('tick 50')
  19. in= readln(ca)
  20. parse var in in1 in2 in3 in4 in5 .
  21.  
  22. /*handle help display delay*/
  23. if delaybub>0 then do
  24. delaybub=delaybub-1
  25. /* if we reach zero display the help bubble*/
  26. if delaybub=0 then do
  27. bubleon=newbub
  28. call topipe('bubble top 'bubx 'left 'buby 'gt "'help.newbub'"')
  29. end
  30. end
  31.  
  32. if (in1='help' & helpon~=0 ) then call bubble(in2)
  33.  
  34. /*close help bubble if active state of window changes*/
  35. if in1='active' then call bubble(0)
  36. if in1='gadget' then call gadget()
  37. if in1='menu' then call menu()
  38. if in1='close' then call windowclosed()
  39. if in1='iconify' then call iconify()
  40. if in1='app' then call app()
  41. if in1='arexx' then call rxhst()
  42.  
  43. end
  44. /*end of main loop*/
  45.  
  46. exit
  47.  
  48. gadget:
  49. if in2=agegad then age=in3
  50. if in2=sexgad then sex=in3
  51. if in2=knogad then knowledge=in3
  52. if in2=basgad then basic=in3
  53. if in2=aregad then arexx=in3
  54. if in2=cgad then c=in3
  55. if in2=asmgad then asm=in3
  56. /* the return from a string gadget is parsed differently since it can be more
  57. then 1 word. */
  58. if in2=namegad then do
  59. parse var in . . in3
  60. /*strip it since arexx parsing adds the leading space to the last string
  61. assignment*/
  62. name=strip(in3)
  63. if name='' then call topipe('id 'savegad' dis 1 ref')
  64. else call topipe('id 'savegad' dis 0 ref')
  65. end
  66.  
  67. if in2=dongad then do
  68. showtx(0, 'Normal exit *nname' name '*nage' age '*nsex' sex '*nknowledge' knowledge '*nbasic' basic 'arexx' arexx 'c' c 'asm' asm)
  69. exit
  70. end
  71.  
  72. if in2=resgad then call resetform()
  73. if in2=savegad then call saveform()
  74. if in2=loadgad then call loadform()
  75.  
  76. if in2=cangad then do
  77. showtx(300,'user canceled')
  78. exit
  79. end
  80.  
  81. return
  82.  
  83. windowclosed:
  84. showtx(300,'User aborted with CTRL BackSlash or closed window.')
  85. exit
  86. return
  87.  
  88. menu:
  89. if in2=0 then do
  90. if in3=0 then do
  91. if in4=0 then call setenvarc()
  92. if in4=1 then call unsetenvarc()
  93. end
  94. if in3=1 then do
  95. helpon=in5
  96. if helpon=0 then call bubble(0)
  97. end
  98. if in3=3 then showtx(500,' Tutorial 4 for AWNP *n  by William Parker')
  99. end
  100.  
  101.  
  102. if in2=1 then do
  103. if in3=0 then do
  104. showtx(0, 'name' name '*nage' age '*nsex' sex '*nknowledge' knowledge '*nbasic' basic 'arexx' arexx 'c' c 'asm' asm)
  105. end
  106. if in3=1 then do
  107. if in4=0 then showtx(0, 'name' name '*nage' age '*nsex' sex)
  108. if in4=1 then showtx(0, 'knowledge' knowledge '*nbasic' basic 'arexx' arexx 'c' c 'asm' asm)
  109. end
  110. end
  111. return
  112.  
  113.  
  114. setdefaults:
  115. name=''
  116. age=30
  117. sex=0
  118. knowledge=0
  119. basic=0
  120. c=0
  121. asm=0
  122. arexx=0
  123. return
  124.  
  125. buildgui:
  126. /* get our window size and position */
  127. call getenv()
  128.  
  129. /* Open pipe 'tut2' with GUI creation option '/xc' */
  130. call open(ca,"awnpipe:tut4/xc")
  131.  
  132. /* define the window */
  133.  
  134. /* The first line oF every GUI is the window definition. The window is titled
  135. "Tutorial 2" and its elements will be laid out verticaly (v). It has a
  136. closegadget (cg) , depthgadget (dg) , and dragbar (db). It will have spaces
  137. inbetween its gadgets (si). It will open on the topleft (tl) of the screen
  138. becoming active (a) when opened. The window can be icoified (ig) and modified
  139. (m). It is an app window (app) . It can be sized (SG) but not verticaly (fh)*/
  140.  
  141. call topipe(' "Tutorial 5" v cg dg db si a help state ig sg fh m app ii "tutorial4.rx" 'windowdef)
  142.  
  143. /* define the gadgets*/
  144.  
  145. call topipe(' layout b 0 v')
  146.  
  147. /* Labels are used to tell the user what information to enter in each gadget.
  148. These labels are unatached (ua) when they are defined so don't go directly
  149. into the GUI. Instead they are attached to the following gadget by the
  150. childlabel (chl) keyword. */
  151.  
  152. call topipe(' label  gt "Name: " ua')
  153. namegad=topipe('string lj chl')
  154. help.namegad='Enter a name here. This feild must be valid*n before you can save the information.'
  155.  
  156. call topipe(' label gt "Age: " ua')
  157. agegad=topipe('integer chl minn 5 maxn 115 arrows defn 30  weiw 0')
  158. help.agegad='Enter an age between 5 and 115'
  159.  
  160. call topipe(' label gt "Sex: " ua')
  161. sexgad=topipe('radiobutton rl "Male|Female" chl')
  162. help.sexgad='You may only choose one sex.'
  163.  
  164. call topipe(' label gt "Knowledge: " ua')
  165. knogad=topipe('chooser pu cl "Novice|Average|Good|Expert" chl')
  166. help.knogad='Enter your programming knowledge level.'
  167.  
  168. call topipe(' label gt "Language(s): " ua')
  169.  
  170. call topipe(' layout b 0 chl')
  171. basgad=topipe('checkbox gt "Basic " chl')
  172. help.basgad='Select if you program in Basic.'
  173.  
  174. aregad=topipe('checkbox gt "Arexx " chl')
  175. help.aregad='Select if you program in Arexx.'
  176.  
  177. cgad=topipe('checkbox gt "C " chl')
  178. help.cgad='Select if you program in C.'
  179.  
  180. asmgad=topipe('checkbox gt "ASM " chl')
  181. call topipe(' le')
  182. help.asmgad='Select if you program in Assembler.'
  183.  
  184. call topipe(' le')
  185.  
  186. call topipe(' layout si so')
  187. savegad= topipe('button gt "Save" ')
  188. help.savegad='Save data to a file.*n(You must enter a name first)'
  189.  
  190. loadgad= topipe('button gt "Load" ')
  191. help.loadgad='Read a data file.'
  192.  
  193. resgad= topipe('button gt "Reset Form" ')
  194. help.resgad='Reset the form to defaults.'
  195.  
  196. dongad= topipe('button gt "Done" c')
  197. help.dongad='Display data and quit the demo.'
  198.  
  199. cangad= topipe('button gt "Cancel" c')
  200. help.cangad='Quit the demo without displaying the data.'
  201.  
  202. call topipe(' le')
  203.  
  204.  
  205. call topipe(' menu gt "Project|Window|$@SSnapshot|$@UUnSnapshot|^&Bubble Help|-|About"')
  206. call topipe(' menu gt "Data|@AShow all data|Show part|$@PPersonal|$@SSkill"')
  207. call topipe(' arexx gt "TUTORIAL5|age|sex|knowledge|front|quit"')
  208.  
  209. getfilegad=topipe('getfile gt "Select Information File" fn "t:" ua pat "#?.tut3"')
  210.  
  211. /*open the GUI window*/
  212. call topipe("open")
  213. return
  214.  
  215.  
  216. topipe:
  217. /* this routine does error checking on lines written to pipe.*/
  218.  
  219. /*get line to output*/
  220. parse arg out
  221.  
  222. /* write to the pipe*/
  223. call writeln(ca,out)
  224.  
  225. /*get responce and parse it.*/
  226. res=readln(ca)
  227. parse var res res1 res2 .
  228.  
  229. /* if all is ok return the second part of the responce (usualy the GID)*/
  230. if res1='ok' then return(res2)
  231.  
  232. /* something went wrong, we notify the user then exit */
  233. /*show problem line and responce (reponce may be just a blank line)*/
  234. say 'error from: 'out
  235. say '  responce: ' res
  236. exit
  237.  
  238. resetform:
  239. call topipe('id 'agegad' defn 30 ref')
  240. call topipe('id 'sexgad' s 0 ref')
  241. call topipe('id 'knogad' s 0 ref ')
  242. call topipe('id 'basgad' s 0 ref')
  243. call topipe('id 'aregad' s 0 ref')
  244. call topipe('id 'cgad' s 0 ref ')
  245. call topipe('id 'asmgad' s 0 ref')
  246. call topipe('id 'namegad' gt "" ref')
  247. topipe('id 'savegad' dis 1 ref')
  248. call setdefaults()
  249. return
  250.  
  251. saveform:
  252. call open(form,'t:'name'.tut3','W')
  253. call writech(form,age sex knowledge basic arexx c asm name)
  254. call close(form)
  255. return
  256.  
  257. loadform:
  258. call writeln(ca,'id 'getfilegad' fn "t:" s 1')
  259. res=readln(ca);
  260. parse var res res1 '"' filename '"'
  261. loadapp:
  262. if res1=0 then return
  263. call open(form,filename,'R')
  264. formin=readch(form,1000)
  265. parse var formin age sex knowledge basic arexx c asm name
  266. name=substr(name,2)
  267. call close(form)
  268. /*uniconify in case its needed*/
  269. update:
  270. call topipe('id 0 s 64')
  271.  
  272. call topipe('id 'agegad' defn 'age' ref')
  273. call topipe('id 'sexgad' s 'sex' ref')
  274. call topipe('id 'knogad' s 'knowledge' ref ')
  275. call topipe('id 'basgad' s 'basic' ref')
  276. call topipe('id 'aregad' s 'arexx' ref')
  277. call topipe('id 'cgad' s 'c' ref ')
  278. call topipe('id 'asmgad' s 'asm' ref')
  279. call topipe('id 'namegad' gt "'name'" ref')
  280. if name='' then call topipe('id 'savegad' dis 1 ref')
  281. else call topipe('id 'savegad' dis 0 ref')
  282. return
  283.  
  284. app:
  285. parse var in . in2
  286. filename=strip(in2)
  287. if (right(filename,5)='.tut3') then do
  288. res1=1
  289. call loadapp()
  290. end
  291. return
  292.  
  293. /* send a modify command to iconify/uniconify window and remember the current
  294. state of the window*/
  295. iconify:
  296. iconified=in2
  297. if in2=1 then call topipe('id 0 s 32')
  298. else  call topipe('id 0 s 64')
  299. return
  300.  
  301. showtx:
  302. call open(ptx,'awnpipe:tut3txt/xc')
  303. call writeln(ptx,'db dg "Tutorial 4" q cg cm m a so si ')
  304. call writeln(ptx,'label lj gt "'arg(2)'"')
  305. call writeln(ptx,'open')
  306. if arg(1)~=0 then call writeln(ptx,'tick 'arg(1))
  307. else call writeln(ptx,'m')
  308. call close(ptx)
  309. return(0)
  310.  
  311.   setenv:
  312.   call writeln(ca,'id 0 read')
  313.   windowr=readln(ca)
  314.   if open(env,'env:'envname,'W') then do
  315.   call writech(env,windowr)
  316.   close(env)
  317.   end
  318.   return(0)
  319.  
  320.   setenvarc:
  321.   call setenv()
  322.   address command 'copy env:'envname 'envarc:'envname' >nil:'
  323.   return
  324.  
  325.   unsetenvarc:
  326.   if exists('envarc:'envname) then delete('envarc:'envname)
  327.   if exists('env:'envname) then delete('env:'envname)
  328.   return
  329.  
  330.   getenv:
  331.   windowdef='tl'
  332.   if(open(env,'env:'envname,'R')) then do
  333.   windowt=readln(env)
  334.   parse var windowt wl wt ww wh .
  335.   if (datatype(wt,N) &datatype(wl,N) &datatype(ww,N) & datatype(wh,N) ) then
  336.   windowdef= 'top' wt 'left' wl 'width' ww 'height' 1
  337.   close(env)
  338.   end
  339.   return
  340.  
  341. bubble:
  342. /* get help gadget number*/
  343. newbub=arg(1)
  344. if newbub=-1 then newbub=0
  345. /* return if it has not changed*/
  346. if (bubbleon=newbub) then return()
  347. /* close old bubble if we have one*/
  348. if bubbleon~=0 then call  topipe('bubble')
  349. /* if its not a valid gadget kill count down to display*/
  350. if newbub=0 then delaybub=0
  351. /*else remeber mouse position and start new countdown*/
  352. else do
  353. bubx=in3
  354. buby=in4
  355. delaybub=3
  356. end
  357. return
  358.  
  359. rxhst:
  360.  
  361. /*read the external command from the pipe*/
  362. rxcmd=readch(ca,in3)
  363. if in2>4 then call topipe("rc 10")
  364. if in2=3 then do
  365.   call topipe('rc 0 result "Window brought to front"')
  366.   call topipe('id 0 s 66')
  367. end
  368. if in2=4 then do
  369.   call topipe('rc 0 result "tutrial 5 exiting"')
  370.   exit
  371. end
  372. parse var rxcmd rx1 rx2 .
  373. if rx2='' then do
  374. if in2=0 then call topipe('rc 0 result "'age'"')
  375. if in2=1 then call topipe('rc 0 result "'sex'"')
  376. if in2=2 then call topipe('rc 0 result "'knowledge'"')
  377. end
  378. else do
  379. if in2=0 then age=rx2
  380. if in2=1 then sex=rx2
  381. if in2=2 then knowledge=rx2
  382. call topipe('rc 0')
  383. call update()
  384. end
  385. return
  386.